home *** CD-ROM | disk | FTP | other *** search
/ The PC-SIG Library 10 / The PC-Sig Library - Shareware for the IBM PC and Compatibles (PC-SIG)(Tenth Edition Disks 1-2804)(1991).iso / PC_SIGCD / 10 / 9 / DISK1095.ZIP / HRMMNT.PRG < prev    next >
Text File  |  1986-10-07  |  8KB  |  250 lines

  1. *
  2. * HRMMNT.PRG
  3. * PERSONNEL FILE MAINTENANCE SCREEN
  4. * FILE STRUCTURE MUST ALREADY EXIST
  5. SET HEADING OFF
  6. SET SAFETY OFF
  7. SET STATUS OFF
  8. CLEAR
  9. CLEAR ALL
  10. SET TALK OFF
  11. SET BELL OFF
  12. * DEFINE A STRING OF BLANKS
  13. STORE SPACE(80) TO BLANK
  14. * CLEAR REQUEST AND ACTION CONTROL VARIABLES
  15. STORE " " TO REQUEST
  16. STORE " " TO ACTION
  17. STORE "N" TO DATAIN
  18. STORE 0 TO RECCNT
  19. *
  20. *===============================START MODS: 1================================*
  21. * SET NAME OF FILE                                                           *
  22. STORE "PERSONNL" TO FILENAME
  23. * SETUP COUNT OF INDEXES FOR THE FILE filename
  24. STORE 2 TO IXCOUNT
  25. * SETUP CONSTANTS CONTAINING INDEXES IN SEQUENCE TO USE IN MACRO LATER.
  26. * LIST EACH INDEX FIRST AS A PRIMARY INDEX. VARIABLES NAMED IXA, IXB, IXC, ETC.
  27. STORE "PNAME,PSSAN" TO IXA
  28. * DEFINE KEYS FOR INDEX. IF NUMERIC, MUST CONVERT WITH STR(). USE DI+IXA, ETC.
  29. STORE "LAST_NAME-','-FIRST_NAME" TO DIIXA
  30. STORE "PSSAN,PNAME" TO IXB
  31. STORE "SSAN" TO DIIXB
  32. *==================================END MODS==================================*
  33. *
  34. * SAVE NAME OF MACRO WHICH CONTAINS ACTIVE INDEX AS FIRST INDEX
  35. STORE "IXA" TO LIVE_IX
  36. * FIND RECORD COUNT
  37. USE &FILENAME
  38. COUNT TO RECCNT
  39. * IF DBF FILE HAS NO RECORDS THIS CONDITION WILL PREVENT A 'RECORD OUT OF
  40. * RANGE' ERROR FROM OCCURING WHEN THE ADD OPTION IS CHOSEN FOR THE FIRST TIME.
  41. IF RECCNT = 1
  42.    RECCNT = RECCNT-1
  43. ENDIF
  44. * IF FILE IS EMPTY, ASSUME INDEXES NOT CREATED AND CREATE THEM
  45.   IF RECCNT = 0 .AND. IXCOUNT>0
  46.    STORE 1 TO COUNT
  47.    DO WHILE COUNT<=IXCOUNT
  48.       STORE "IX"+CHR(64+COUNT) TO TEMP
  49.       STORE "DI"+TEMP TO TEMP2
  50.       IF IXCOUNT>1
  51.          STORE SUBSTR(&TEMP,1,AT(",",&TEMP)-1) TO TEMP
  52.       ELSE
  53.          STORE &TEMP TO TEMP
  54.       ENDIF
  55.       STORE &TEMP2 TO TEMP2
  56.       INDEX ON &TEMP2 TO &TEMP
  57.       STORE COUNT+1 TO COUNT
  58.    ENDDO
  59.   ENDIF
  60. * ADD INDEXES
  61. SET INDEX TO &IXA
  62. * POSITION AT FIRST RECORD IN LIVE INDEX SEQUENCE FOR INITIAL DISPLAY
  63. GO TOP
  64. *
  65. * MAIN UPDATE LOOP. TERMINATED BY 'M' AS REQUEST
  66. DO WHILE REQUEST<>"M"
  67. *
  68. *===============================START MODS: 2================================*
  69. * DISPLAY SCREEN MASK: HEADING INFORMATION PLUS LABELS FOR EACH FIELD        *
  70.    @ 1,22 SAY "SMITH'S BIKEWORKS INFORMATION SYSTEM"
  71.    @ 3,11 SAY ">> Human Resources Management System File Maintenance <<"
  72.    @ 5,17 SAY "Today's Date:"
  73.    ?? DATE()
  74. * SETUP VARIABLE PART OF MASK
  75.    CLEAR GETS
  76.    @ 7,1  SAY "EMPLOYEE ? " GET HIRED
  77.    @ 7,40 SAY "SSAN " GET SSAN
  78.    @ 8,1  SAY "Name --Last " GET LAST_NAME
  79.    @ 8,38 SAY "First " GET FIRST_NAME
  80.    @ 8,63 SAY "Initial " GET INITIAL
  81.    @ 10,1 SAY "Street " GET STREET
  82.    @ 10,36 SAY "City " GET CITY
  83.    @ 10,58 SAY "State " GET STATE
  84.    @ 10,69 SAY "Zip " GET ZIP
  85.    @ 11,1  SAY "Education -- Grades " GET GRADE_SCHL
  86.    @ 11,30 SAY "College " GET COLLEGE
  87.    @ 11,45 SAY "Phys Limits " GET PHYS_LIMIT
  88.    @ 13,1  SAY "Sex " GET SEX
  89.    @ 13,10 SAY "Marital Status " GET MAR_STATUS
  90.    @ 13,31 SAY "Birth Date " GET BIRTH_DATE PICTURE "99/99/99"
  91.    @ 15,1  SAY "Hourly ? " GET HOURLY
  92.    @ 15,14 SAY "Rate/Salary " GET PAY_RATE
  93.    @ 15,36 SAY "Overtime Factor " GET OVER_TIME
  94.    @ 15,59 SAY "Exemptions " GET EXEMP
  95.    @ 16,1 SAY "Year To Date -- Pay $ " GET YTD_PAY
  96.    @ 16,35 SAY "Withholding $ " GET YTD_WTHHLD
  97.    @ 16,60 SAY "FICA $ " GET YTD_FICA
  98. * DATE OF LAST UPDATE SHOULD BE ONE OF THE FIELDS (LAST_UPDT)
  99.    @ 18,1 SAY "Last Updated : "
  100.    ?? LAST_UPDT
  101. *==================================END MODS==================================*
  102. *
  103. * DISPLAY VARIABLE DATA IN SCREEN HEADING
  104.    IF DELETE()
  105.       @ 5,1 SAY "* DELETED *"
  106.    ELSE
  107.       @ 5,1 SAY "           "
  108.    ENDIF
  109. * IDENTIFY RECORD
  110.    @ 5,62 SAY RECCNT
  111.    @ 5,50 SAY RECNO()
  112.    @ 5,43 SAY "Record"
  113.    @ 5,61 SAY "of"
  114. * IF DATAIN FLAG SET, ACTIVATE THE GETS
  115.    IF DATAIN="Y"
  116.       @ 19,72 GET ACTION
  117.       READ
  118. * DATE STAMP RECORD
  119.       REPLACE LAST_UPDT WITH DATE()
  120.       IF REQUEST="E".OR.ACTION<>"C"
  121.          STORE "N" TO DATAIN
  122.          STORE " " TO REQUEST
  123.          STORE " " TO ACTION
  124.       ENDIF 2
  125.    ELSE
  126.       CLEAR GETS
  127.    ENDIF 1
  128. *
  129. * DISPLAY CONTROL SUBMENU, CURRENT ACTIVE INDEX
  130.    @ 19,0 SAY BLANK
  131.    @ 20,0 SAY "----------------------------------------"
  132.    @ 20,40 SAY "----------------------------------------"
  133.    @ 21,0 CLEAR
  134.    @ 21,2 SAY ;
  135. "<F>ind Record  <A>dd Record   <D>elete/Recall  <E>dit Record   Current Active"
  136.    @ 22,2 SAY ;
  137. "<P>rev Record  <N>ext Record  <M>enu (return)  <K>ey Select    Key:          "
  138. * IF INDEX SET NAMED IN LIVE_IX HAS MULTIPLE ENTRIES, EXTRACT FIRST
  139.    IF (","$&LIVE_IX)
  140.       STORE SUBSTR(&LIVE_IX,1,AT(",",&LIVE_IX)-1) TO TEMP
  141.       @ 22,70 SAY TEMP
  142.    ELSE
  143.       @ 22,70 SAY &LIVE_IX
  144.    ENDIF
  145. * GET REQUEST AND FORCE TO UPPER CASE UNLESS ALREADY IN 'A' FOR ADD RECORDS
  146.    IF REQUEST<>"A"
  147.       STORE " " TO REQUEST
  148.       STORE " " TO ACTION
  149.       @ 23,10 SAY "          *** NEXT ACTION TO PERFORM " GET REQUEST
  150.       READ
  151.       STORE UPPER(REQUEST) TO REQUEST
  152.    ENDIF
  153. * CLEAR ADD RECORD COMMAND LINE, SUBMENU AREA
  154.    @ 21,0 CLEAR
  155.    DO CASE
  156. * ADD NEW CASE OR EDIT DISPLAYED CASE
  157.       CASE REQUEST="A".OR.REQUEST="E"
  158. * IN ADD MODE, APPEND A BLANK RECORD FOR THE DATA AND POSITION TO THAT RECORD
  159.          IF REQUEST="A"
  160.             @ 19,6 SAY "*** PRESS 'C' TO CONTINUE ADDING NEW RECS, ANYTHING ;
  161. ELSE TO QUIT"
  162.             APPEND BLANK
  163.             STORE RECCNT+1 TO RECCNT
  164.             GO RECCNT
  165.          ELSE
  166.             @ 19,6 SAY "******** PRESS ANY KEY TO FINISH EDIT AND RETURN TO ;
  167. SUBMENU     "
  168.          ENDIF
  169.          @ 21,10 SAY "Enter data at cursor position. Move among fields with"
  170.          @ 22,10 SAY "cursor control keys. Press ENTER to move to next field."
  171.          @ 23,10 SAY "Press ENTER alone to leave field unchanged."
  172. * SET FLAG TO CAUSE NEW DATA TO BE READ
  173.          STORE "Y" TO DATAIN
  174. * TOGGLE DELETE FLAG. * FUNCTION CHECKS IF RECORD NOW FLAGGED AS DELETED
  175.       CASE REQUEST="D"
  176.          IF DELETE()
  177.             RECALL
  178.          ELSE
  179.             DELETE
  180.          ENDIF
  181. * PREVIOUS RECORD IN ACTIVE INDEX SEQUENCE
  182.       CASE REQUEST="P"
  183.          SKIP -1
  184. * NEXT 3 LINES SECURE THE BACKWARD LOOP
  185.          IF BOF()
  186.             GO BOTTOM
  187.          ENDIF
  188. * NEXT RECORD IN ACTIVE INDEX SEQUENCE
  189.       CASE REQUEST="N"
  190.          SKIP +1
  191. * NEXT 3 LINES SECURE THE FOWARD LOOP
  192.          IF EOF()
  193.             GO TOP
  194.          ENDIF
  195. * GET SEARCH VALUE FOR INDEXED SEARCH
  196.       CASE REQUEST="F"
  197. * USE MACRO DEFINING INDEX ENTRIES FROM DATA FIELDS
  198.          STORE "DI"+LIVE_IX TO IXDEF
  199.          STORE &IXDEF TO SV
  200.          STORE &SV TO SV
  201.          @ 21,1 SAY ;
  202.          "ENTER SEARCH VALUE. VALUE SHOWN IS FROM THE DISPLAYED RECORD. PRESS"
  203.          @ 22,1 SAY "CTRL-Y TO CLEAR " GET SV
  204.          READ
  205. * REMOVE TRAILING BLANKS BEFORE SEARCH
  206.          STORE TRIM(SV) TO SEARCH
  207. * IF RECORD IS NOT FOUND DISPLAY STAYS AT CURRENT RECORD
  208. * NEXT LINE TO KEEP TRACK OF CURRENT RECNO() FOR TEST BELOW
  209.          STORE RECNO() TO NOW
  210.          SEEK SEARCH
  211. * NEXT THREE LINES KEEP PRESENT RECORD DISPLAYED IF NO FIND
  212.          IF EOF()
  213.             GOTO NOW
  214.          ENDIF
  215. * CHANGE INDEX
  216.       CASE REQUEST="K"
  217.          STORE RECNO() TO RECNOW
  218.          STORE " " TO IXCHOICE
  219. * SETUP MENU OF INDEX NAMES, PROVIDE IF CLAUSE FOR EACH INDEX                *
  220.          @ 21,9 SAY " "
  221.          STORE 1 TO COUNT
  222.          DO WHILE COUNT<=IXCOUNT
  223.             STORE "IX"+CHR(64+COUNT) TO TEMP
  224.             IF IXCOUNT>1
  225.                ?? CHR(64+COUNT)+". "+SUBSTR(&TEMP,1,AT(",",&TEMP)-1)+" "
  226.             ELSE
  227.                ?? CHR(64+COUNT)+". "+&TEMP
  228.             ENDIF
  229.             STORE COUNT+1 TO COUNT
  230.          ENDDO
  231.          @ 22,10 SAY "Press letter of desired key " GET IXCHOICE
  232.          READ
  233.          STORE UPPER(IXCHOICE) TO IXCHOICE
  234.          IF IXCHOICE>="A".AND.IXCHOICE<=CHR(64+IXCOUNT)
  235.             STORE "IX"+IXCHOICE TO LIVE_IX
  236.             STORE &LIVE_IX TO TEMP
  237.             SET INDEX TO &TEMP
  238.          ENDIF
  239. * GOTO THIS RECORD TO ACTIVATE INDEX
  240.          IF RECNOW>0
  241.             GO RECNOW
  242.          ELSE
  243.             GO BOTTOM
  244.          ENDIF
  245.    ENDCASE
  246. ENDDO
  247. * FALL OUT OF DO WHEN 'M' IS REQUEST, RETURN TO SUBSYSTEM'S MENU
  248. CLEAR
  249. RETURN
  250.